home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / buffer.ada < prev    next >
Text File  |  1996-01-30  |  1KB  |  52 lines

  1. package Buffer_Package is
  2.  
  3.   task type Buffer is
  4.     entry Append(I: in  Integer);
  5.     entry Take  (I: out Integer);
  6.   end Buffer;
  7.  
  8.   procedure Append(B: Buffer; I: in  Integer);
  9.   procedure Take  (B: Buffer; I: out Integer);
  10.  
  11. end Buffer_Package;
  12.  
  13. package body Buffer_Package is
  14.   N: constant Integer := 10;
  15.  
  16.   task body Buffer is
  17.     B: array(0..N-1) of Integer;
  18.     In_Ptr, Out_Ptr: Integer := 0;
  19.     Count: Integer := 0;
  20.      
  21.   begin
  22.     loop
  23.       select
  24.         when Count < N =>
  25.           accept Append(I: in Integer) do
  26.             B(In_Ptr) := I;
  27.           end Append;
  28.         Count := Count + 1;
  29.         In_Ptr := (In_Ptr + 1) mod N;
  30.       or
  31.         when Count > 0 =>
  32.          accept Take(I: out Integer) do
  33.            I := B(Out_Ptr);
  34.           end Take;
  35.         Count := Count - 1;
  36.         Out_Ptr := (Out_Ptr + 1) mod N;
  37.       end select;
  38.     end loop;
  39.   end Buffer;
  40.  
  41.   procedure Append(B: Buffer; I: in  Integer) is
  42.   begin
  43.     B.Append(I);
  44.   end Append;
  45.  
  46.   procedure Take  (B: Buffer; I: out Integer) is
  47.   begin
  48.     B.Take(I);
  49.   end Take;
  50.  
  51. end Buffer_Package;
  52.